package com.tilas.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.tilas.mapper.EmpExprMapper;
import com.tilas.mapper.EmpMapper;
import com.tilas.pojo.*;
//import com.tilas.pojo.EmpQueryParam;
import com.tilas.service.EmpSerivce;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;


@Slf4j
@Service
public class EmpSerivceImpl implements EmpSerivce {

    @Autowired
    EmpMapper empMapper;

    @Autowired
    private EmpExprMapper empExprMapper;

    @Override
    public PageResult<Emp> page(EmpQueryParam empQueryParam) {

        //1.设置pagehelper分页参数
        PageHelper.startPage(empQueryParam.getPage(),empQueryParam.getPageSize());

        //2.执行查询
        List<Emp> empList = empMapper.list(empQueryParam);

        //3.封装分页结果
        Page<Emp> p = (Page<Emp>) empList;

        //3. 封装结果
        return new PageResult(p.getTotal(), p.getResult());
    }

    /**
     * 新增员工信息
     * */


//    @Transactional(rollbackFor = Exception.class)//控制所有异常回滚
     @Transactional//事务管理    只能控制运行时异常 RuntimeR=Exception才会回滚
     @Override
    public void save(Emp emp) {
        //1.保存员工基本信息
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        empMapper.insert(emp);

//        int i=1/0;
        //2.保存员工工作经历信息

        List<EmpExpr> exprList = emp.getExprList();
        if (!CollectionUtils.isEmpty(exprList)) {
            //遍历集合，为empid赋值
            exprList.forEach(empExpr -> {
                empExpr.setEmpId(emp.getId());
            });
            empExprMapper.inserBatch(exprList);
        }
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delete(List<Integer> ids) {

         //1.批量产出员工的基本信息
        empMapper.deleteByIds(ids);
        //2.批量删除员工的工作经历信息
        empMapper.deleteByEmpIds(ids);
    }

    @Override
    public Emp findByid(Integer id) {
        Emp emp = empMapper.findById(id);
        return emp;
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public Emp update(Emp emp) {
         //1.根据id修改员工的基本信息
        emp.setUpdateTime(LocalDateTime.now());
        empMapper.updateById(emp);

        //2.根据id修改员工的工作经历信息//
        //2.1先根据员工的id删除原有的工作经历信息
        empMapper.deleteByEmpIds(Arrays.asList(emp.getId()));
        //2.2再添加
        List<EmpExpr> exprList = emp.getExprList();
        if (!CollectionUtils.isEmpty(exprList)) {
            exprList.forEach(empExpr -> empExpr.setEmpId(emp.getId()));
            empExprMapper.inserBatch(exprList);
        }

        return null;
    }

    @Override
    public List<Emp> list() {
         List<Emp> list = empMapper.list(null);
        return list;
    }

    @Override
    public LoginInfo login(Emp emp) {
         //1.调用mapper接口，根据用户名和密码查询员工信息
        Emp e = empMapper.selectByUsernameAndPassword(emp);

        //2.判断：判断是否存在这个员工，如果存在，组装登录成功信息
        if (e != null){
            log.info("员工登录成功：{}",e);
            return new LoginInfo(e.getId(),e.getUsername(),e.getName(),"");
        }
        //3.不存在，返回null
        return null;
    }

}

